\chapter{绪论}

\section{引言}
随着互联网、物联网、人工智能等技术的成熟，全球大数据产业已经进入了快速发展的阶段。各种应用通过对数据进行选择、加工、挖掘和分析\cite{data_wajue1,data_wajue2,data_wajue3}，提取出具有潜在价值的隐含信息，推动包括医疗、教育、商业、工业、农业\cite{yiliao,jiaoyu,shangye}等各个领域的快速发展。随着数据规模和种类的急剧增加，传统的大数据分析方法和计算模式已经难以满足各种新型应用的需求。在大数据时代，以深度学习为代表的智能计算已经成为一种新兴的大数据分析处理方式。智能计算在许多大数据应用领域都发挥了重要作用，例如图像识别、自然语言处理、推荐系统等\cite{resnet,mobilenet,nlp1,nlp2,recommender1,recommender2}。

近年来，数据存储和智能计算越来越依赖于云计算技术提供基础支撑，多种大数据应用（例如数据挖掘、深度学习等）已经被部署在公用云计算环境中。云计算通过网络将各种软硬件资源集中起来，具有远超传统计算系统的存储容量和计算性能。云计算环境通过虚拟化技术将海量存储、计算、网络等资源进行整合，灵活分配与协同各种资源，用户只需购买计算所需的必要资源，不但解决了用户本地资源不足的问题，而且有效节约了云服务商和用户双方的计算成本。
然而，由于大量用户的多种应用共享使用公用云中的各类软硬件资源，目前云环境中的数据存储和智能计算仍然面临安全可靠性低、存储和计算硬件异构、弹性扩展困难等问题和挑战。

首先，随着计算设施的公用化，越来越多的个人和中小企业为了控制成本，将其核心业务和数据提交到公用云环境托管。多种类型的应用运行在公用云上，数据存储的可信性问题日益凸显。一方面，在大规模云环境中存储节点的失效和恢复成为一种常态，给传统存储系统的可靠性和可用性带来严重挑战。另一方面，不同应用相互干扰、越权访问的风险显著增加，某个应用I/O过程中的行为可能会影响到整个存储系统，从而对其它应用的数据安全造成影响甚至破坏。
第二，大规模存储环境中具有大量的异构存储资源（例如机械硬盘、固态硬盘、持久性内存）和计算资源（例如CPU、GPU、专用加速器）等。这些异构的存储/计算资源之间具有巨大的性能和成本差异，管理和使用机制各不相同。如何根据上层应用的需求变化，按需在线聚合各种异构资源，实现高效的数据存储与智能计算，保持系统服务容量、服务质量等关键能力的均衡性，提供服务水平协议（Service Level Agreement，SLA）保证，是云环境面临的重大挑战。
第三，云环境中各类数据的规模以数量级幅度增长，各类智能计算应用对CPU/GPU计算资源的需求也经常出现大幅波动。应用需求的多样性和大规模用户宏观行为的不可预测性使得云环境下的智能计算任务规模变化难以预测，应用的动态性和自治性使得云环境下CPU、GPU等各类计算资源供给存在不确定性和不平衡性。虽然基于GPU的智能计算已经得到了广泛深入研究，但是CPU/GPU的协同机制和基于CPU的智能计算的相关研究较少，无法适应云环境中智能计算应用的弹性扩展需求。

\section{问题背景}
\subsection{云环境中的数据存储与计算}
大数据时代的来临使得云计算\cite{cloud1,cloud2}得到了广泛的应用与关注，云计算服务为大数据的存储、计算和分析提供了基础支撑。目前，公用云的服务可大致分为基础架构即服务（IaaS）\cite{iaas}、平台即服务（PaaS）\cite{paas}、软件即服务（SaaS）\cite{saas}三层，其中：IaaS主要提供整个基础架构及其维护相关的服务，通过虚拟化技术把各类存储、计算、网络设备以虚拟资源池的形式向用户提供；PaaS主要提供虚拟化的计算平台，实现类似传统操作系统的虚拟化平台以及开发工具，例如对象存储、数据库等；SaaS主要提供完整的软件和应用服务，用户只需要对软件和应用进行定制。

在上述三种服务中，IaaS是公有云服务的基础，为其他服务提供了底层的软硬件支持。本文重点关注如何在IaaS层实现高效的数据存储与智能计算。目前，IaaS服务主要面临资源闲置，服务器利用率低，任务延迟高，业务弹性小，数据安全隐患等问题。为了解决上述问题，降低服务成本、提高服务质量，IaaS云服务应当满足如下需求。

（1）数据可靠性和可用性。可靠性是指数据不会因为故障（例如断电或硬件损坏）导致丢失且无法恢复，可用性是指数据始终可以保持正常访问，不会因节点发生故障或因网络拥塞导致的高访问延迟导致数据不可用。在云环境中，虽然特定节点宕机的几率较小，但总体发生故障的概率会随着节点数增多而放大。对于大规模云服务器集群而言，有服务器宕机无法访问是一种常态。虽然传统的多副本、纠删码等技术已经基本解决了数据可靠性问题，但是如何尽可能地减少故障的恢复时间来提高数据可用性，仍然是云存储亟待解决的重要问题。

（2）数据安全性。在云计算环境中，因为云端使用虚拟化技术为用户分配计算资源，导致不同用户数据的物理界限被消除，不同用户共享包括内存、磁盘、网络等多种计算资源，在数据传输和共享过程中，因非法访问导致数据泄漏、被篡改的可能性大大提高，由此导致了包括商业机密、个人隐私、金融风险等多种安全隐患。而且云存储相比传统存储更容易受到在线攻击，因为攻击者可以通过网络时刻监听并收集云端的机密数据来实施攻击，而这通常不在传统存储安全模型的考虑范围中。因此，云端的数据安全性要求要比传统数据安全要求更严格，主要包括：(a)机密性（confidentiality）：数据的明文不能被非法获取，数据必须以密文的形式存储，无权限的用户无法获得密钥并解密出明文；(b) 完整性（integrity）：数据的任意部分不能被非法篡改，即使遭到篡改，任何试图篡改的操作也都能应该被检测出来；(c) 新鲜性（freshness）：数据的任意部分始终保持最新版本，数据不会被攻击者协同校验码一起回滚至历史合法版本来逃避完整性检测；(d) 不透明性（Anonymity）：数据的信道应当保持匿名，数据在加解密以及硬件运行过程中不会流出有效的信息被来被实施攻击。

（3）计算效能。公用云环境的核心竞争力是向用户提供高效能的计算服务。效能包括性能和成本两方面指标，云计算用户通常关心在给定成本下的服务性能。例如，虽然SSD的I/O性能比HDD有数量级上的提升，但是考虑到成本限制，很多用户仍然选择使用HDD来存放非经常访问的数据。另一方面，对不同的应用类型，用户关心的性能指标并不完全相同。例如，对于即时线上应用，用户更关心应用的延迟；而对于离线应用，吞吐率则更加重要。异构存储资源（例如SSD、HDD等）和计算资源（例如GPU、CPU等）的协同是提高效能的重要途径。

（4）弹性调度。不同的数据存储与智能计算应用需要不同的存储和计算能力。
% 云计算平台可以按照用户的需求弹性调度资源。
目前，云环境基于主备（primary-backup）分离~\cite{primary}、CRUSH映射\cite{ceph}等机制，已经实现了不同存储资源（例如SSD、HDD等）的动态分配，能够满足数据规模变化的需要。然而，为了实现高效能（高性能、低成本）的智能计算，还需要研究智能计算任务在异构计算资源（例如GPU、CPU等）上的弹性调度。目前在云环境中主要使用GPU进行模型训练，当CPU资源空闲时，如何实现GPU/CPU协同的任务弹性调度，以及如何使用空闲CPU资源加速智能计算，仍然是云环境亟待解决的重要问题。

\subsection{可信数据存储}
云环境通常采用分布式架构，将大规模数据存储到多个服务器中。分布式存储系统可能位于一个数据中心内部，也可能分布在物理位置相距遥远的多个数据中心。
% 云存储技术基于虚拟化技术和集群架构，具有强大的横向扩展能力。
在云存储系统中，
% 用户只关心其可以使用的存储资源规模大小，
用户不需要知道所使用存储的具体位置，而是通过虚拟化技术可以把逻辑存储位置映射到实际的物理存储位置。
% 云存储通过虚拟化技术提高了存储空间的利用率，
% 云存储通过弹性扩展降低了运营成本、避免资源浪费，进而实现了负载均衡、故障冗余等功能。

数据的“可信性”是云存储的基础。自20世纪70年代初期，Anderson\cite{kexinn}首次提出可信系统的概念以来，可信性问题就一直受到学术界和工业界的广泛关注。多年来，从不同的角度，人们对于可信的概念提出了很多不同的表述。从系统的角度，ISO/IEC 15408标准\cite{0ISO}将可信定义为：一个可信的组件、操作或过程的行为在任意操作条件下是可预测的，并能很好地抵抗应用软件、病毒以及一定的物理干扰造成的破坏。可信计算组织TCG认为：如果一个实体总是按照其设定目标所期望的方式行事，则称这个实体为可信的。

伴随着云存储和计算技术的发展，可信的概念和内涵也在不断发展演化。目前，通常认为数据的可信性主要包括可靠性、可用性和安全性。可靠性是指不会因为故障导致数据丢失而且无法恢复，可用性是指数据始终可以保持正常访问，安全性是指数据不会被窃取甚至篡改。

\subsection{动态智能计算}
在大数据时代，传统的算法和系统已经难以适应超大规模数据分析的需求。近年来，以深度学习为代表的智能计算成为一种新兴的大数据分析方式，被广泛部署于云端\cite{large1,large2}。以深度学习为代表的的智能计算在许多领域，例如图像识别、自然语言处理、推荐系统都发挥了重要作用。基本的深度学习包括两个阶段：首先是训练（training）阶段：通过迭代训练调整神经网络（deep neural network, DNN）模型参数，这一过程常采用随机梯度下降法（SGD）来逼近最优模型参数；然后是推理（inference）阶段，使用经过训练的模型对输入数据进行推理并返回结果。

深度学习的训练和推理计算任务可以使用CPU或GPU完成。传统上GPU在深度学习计算任务中占据了主导地位，但是近年来CPU也越来越多的应用于云环境中的深度学习计算。云环境中的深度学习主要使用GPU进行训练和离线推理，以获得高吞吐率，同时采用CPU进行在线推理以降低延迟。另一方面，云端在非业务高峰期会留下大量的空闲CPU，为了避免CPU资源浪费，目前云环境中的离线训练也大量使用了CPU进行处理。
% 此外，基于CPU的推理系统通过批处理和共同定位推理作业技术，能够有效提高系统的推理性能。

在云环境中，计算任务的负载具有高度动态变化的特点。在理想情况下，云环境中的所有GPU和CPU等计算资源都应以自适应伸缩的方式、动态实时地按需提供给用户，随着任务负载的变化对资源进行弹性配置和调整。从云计算服务提供商的角度来看，弹性调度提供了计算资源的动态供给和管理，能够灵活、精确地对物理资源和虚拟资源进行合理调配，避免计算资源供给不足而导致应用程序的响应时间过长、以及计算资源供给过量而导致系统资源利用率低等问题。从用户角度来看，弹性调度能够降低用户进行智能计算的成本，支持各种定制化的服务，实现虚拟计算资源的按需分配，降低维护成本，提高服务效率。
%

\section{问题与挑战}
\subsection{云环境中协同存储架构的可用性问题}
如1.2.1节所述，虽然传统的多副本、纠删码等技术已经基本解决了数据可靠性问题，但是如何尽可能地减少故障的恢复时间来提高数据可用性，仍然是云存储所面临的重要的挑战，因此也是本文关注的重点之一。

SSD虽然有着相比HDD更快的读写速度，但在价格上更加昂贵。出于高效能的考虑，云服务商希望能够以HDD级别的硬件成本提供SSD级别的数据I/O性能。
% 既能够提供SSD级别的高速I/O，又希望能够以较低的成本来配备磁盘硬件。
目前，基于Linux内核DM-cache的混合架构广泛应用于云环境中的数据存储。在DM-cache以及其变体的HDD-SSD混合协同架构中，HDD作为主要磁盘来使用，并持久化所有存储数据；SSD则作为慢速HDD的缓存来提高整体的磁盘读写速度。
DM-cache的元数据保存在SSD上，包含SSD缓存块到HDD数据块的映射、以及该SSD缓存块的脏位（dirty-bit）信息。
%
当I/O请求发生时，DM-cache将先查看请求的数据块是否存在于SSD中，如果命中，则直接对SSD进行读写；如果没有命中，则把HDD中的数据块上移（promote）至SSD，并采用异步更新方式把内存中的脏位元数据信息持久化到SSD上。
% 当服务器收到正常关闭命令时，只需待异步持久化元数据的内核线程工作完毕，即可关闭，此时SSD缓存中的元数据脏位信息是可信的。因为SSD不同于DRAM是非易失的，当系统关闭后再次重启，SSD上的缓存信息也不会丢失，存储系统仍然可以继续上次关闭的状态正常工作。
%
基于DM-cache架构的SSD-HDD混合存储方式可以很好的满足云存储高效能的需求。然而，DM-cache架构为了实现高效的写操作，SSD缓存上的脏位元数据必须是异步更新的。如果发生了系统崩溃（例如断电），系统重启后只能认为所有SSD上的缓存块都是脏的，因为无法判断被标记为干净的块是否其脏位信息是最新的。这导致在进行恢复时必须把整个SSD的数据迁回（demote）至HDD，恢复时间十分缓慢，极大的影响了系统的可用性。
% 虽然也有不进行恢复直接继续使用的做法（因为SSD上的数据不会丢失），但即使这样，由于SSD中的数据已经全部是脏的，任何一个新HDD块被加入SSD缓存时都必须要迁回一个脏块，I/O效率仍然很低，而且通常在发生系统崩溃后，工业界为了保护数据的可靠性通常并不会立即继续使用。

该问题的难点在于：DM-cache的异步元数据更新策略会导致小时级的故障恢复时间，从而严重降低了系统可用性。如果简单地通过修改内核代码将DM-cache的更新策略改为同步更新，在重启后只需要迁回标记为脏的SSD缓存块，从而减少恢复时间并提高系统可用性。
% 之后即使发生崩溃，由于元数据的一致性可以得到保证，只需要迁回标记为脏的SSD缓存块，此时恢复时间短。
然而，使用同步更新策略时，每次到SSD缓存的写操作都需要引入一次额外的脏位元数据SSD写操作，
% 每当一个SSD块被更新都要立即引入一次的脏位元数据同步持久化操作，
严重影响了DM-cache架构的I/O性能。
% 而且，目前DM-cache仅实现了异步和同步两种更新策略，用户没有任何权衡恢复时间与IO性能的折中选项。

\subsection{云环境中数据存储的安全性问题}
相比传统的本地存储与计算，云环境中的数据存储与计算所面临的安全风险更高，因此安全性是目前云存储研究的一个重点问题。在公用云环境中，虚拟化技术使得传统安全边界消失，不同用户数据之间的物理界限被消除，导致可能出现权限非法访问。相比传统的数据存储方式，攻击者更容易实施数据监听、窃取、篡改等攻击。由于用户的数量和分类变化频率高，具有动态性和移动性强的特点，静态的安全防护手段作用被削弱。另一方面，由于云计算平台体系结构复杂，数据传输的渠道多，因此存在安全漏洞的可能性也增加了，更容易受到黑客的攻击。
在云环境中，用户以较低的开销即可获得便捷的管理功能和高性能存储服务。可信执行环境（Trusted Execution Environment，TEE）技术保护用户程序在内存里的执行过程中不会受到不可信系统软硬件的攻击。然而，用户的数据在TEE与持久化存储设备的交互过程中可能会面临多种安全威胁，云存储服务器可能因遭到恶意攻击而导致数据损坏或篡改。

云存储所面临的安全威胁要比传统的非云环境更加严重，因为云端通过网络与外界互联，攻击者更容易实施在线攻击（例如监听、收集、篡改数据等）。
% 而这在传统环境下这通常被认为是很难做到的（攻击者很难在离线状态下一直保持入侵而不被察觉）。
% 在线攻击的可能导致了一种针对云存储的特定攻击方法——回滚攻击（rollback attack）的产生，
回滚攻击（rollback attack）是一种典型的在线攻击方法，
通常指攻击者通过在线监听的方式持续收集某个数据块的历史版本信息，在决定发起攻击时，通过将数据块历史版本直接覆盖当前最新版本来破坏数据的安全性。
虽然数据加密算法AES-GCM可以对每个数据块都生成密文和MAC（message authentication code）校验码来提供加密和完整性校验，但传统的做法是把密文数据与MAC一起存放在固定物理位置，这样当攻击者实施回滚攻击时会连同当前版本数据块的密文和校验码一起回滚至历史版本，而历史版本显然也是通过AES-GCM所产生的合法版本，此时可以绕过完整性校验达到攻击的目的。
% 例如，在金融业务中通过回滚数据至历史版本，可以在完成支付订单后，通过回滚自己账户重新回到未支付的状态来逃离付款。
% 为了预防这类攻击，
传统的加密算法不能有效应对回滚攻击，必须采用安全度更高的加密措施。
目前工业界的做法是采用默克尔哈希树（MHT，merkle hash tree）对回滚攻击进行防范。
例如，Intel-SGX的加密存储系统PFS将所有数据块的密文与MAC码组织成一颗默克尔树。当攻击者试图回滚任何一个数据块时，都必须回滚整条Hash链的状态，而Hash链的根节点绑定了整个磁盘的MAC码。
% 因为任何一个加密数据块也都会与根组成一条Hash链，即使能篡改了当前链，其他链的完整性也会因失效而被检测出来。
也就是说，攻击者试图回滚任何一个数据块都必须对整个磁盘进行回滚，而这样的“大幅度”攻击操作通常是不现实的。

PFS通过使用MHT加密机制，有效保证了数据存储的安全性。
然而，该问题的难点在于：MHT加密机制需要计算Hash链上所有点的MAC码，从而严重降低了数据I/O的性能。
% 对存储提供了有效的机密性、完整性、新鲜性保证，但目前存在的问题在于：
% 但是基于MHT加密的磁盘加密机制是以牺牲I/O性能为代价的。
% PFS在写每个数据块时，必须对整条Hash链上的节点进行更新，
由于默克尔树的高度为$O(logN)$，因此写开销为$O(logN)$。对于读而言，由于每次读数据块之前都需要进行验证，验证过程是沿着Hash链一直迭代到根分别进行验证，因此也是$O(logN)$的。
% 并且，PFS为了保持文件系统的一致性，每次写入数据之前，必须先将数据写入日志，待日志写成功之后才能写入，这导致了二次写入的问题，进一步降低了I/O效率。
% 此外，PFS并未对磁盘的元数据进行加密，这增加了受到基于元数据分析的侧通道攻击的风险。

\subsection{GPU-CPU协同计算的动态弹性调度问题}

虽然传统的虚拟化技术可以实现计算资源的弹性分配，但是对于以深度学习为代表的智能计算，其可扩展性受到计算模型的限制。由于深度学习算法的特殊性，现有方法必须在训练前就指定好所需的硬件设备种类（例如CPU、GPU等）和资源规模（设备数量）作为固定参数，因此在训练过程中无法实现资源的动态弹性伸缩。由于高精度深度学习模型往往需要相当长的时间来完成训练，因此动态弹性调度是云环境中智能计算面临的一个重要挑战。


为了避免云环境中大量的CPU在非高峰时段处于空闲状态而导致资源浪费，
云服务商通常以多种形式使用闲置的CPU资源进行深度学习计算。
GPU-CPU协同的DNN模型训练是提高CPU资源利用率的重要手段。
% 投入使用，例如：将CPU用于在线推理业务。
% ，如果能将空闲的CPU与GPU一起投入到深度学习任务中可以极大提高系统的整体效率。另一方面，“弹性”作为云计算的一个特性也应当在深度学习任务中得到应用，
“弹性”是云计算的重要特点，
云服务商和智能计算用户都希望可以在GPU-CPU协同训练过程中动态调整资源规模及资源类型，从而有效降低计算成本和灵活分配计算资源。

CPU与GPU协同进行深度学习训练有以下难点：首先，CPU与GPU运行速度的不同会导致不同设备的训练无法有效的同步，速度快的GPU必须等待速度慢的CPU，严重影响了并行效率；第二，受深度学习训练算法的限制，通常需要在训练前设定好设备类型（CPU或GPU）以及资源总数（CPU或GPU个数）作为固定参数，训练过程中简单地动态调整资源会严重影响模型训练精度。

\subsection{多核CPU深度学习计算的访存竞争问题}

另一方面，当大量的长时间模型训练任务占用了云环境中的所有GPU时，
动态出现的新训练或推理任务将只能在CPU上进行。
% 深度学习计算任务极为繁重、没有空闲GPU的时候，云环境将只能依赖空闲CPU进行深度学习计算。
虽然目前云环境配备了大量的高性能多核CPU处理器，
但是传统的主流深度学习平台都是面向GPU设计的，依赖于GPU显存的高带宽实现高吞吐率的训练和推理，因此在内存带宽有限的多核CPU上进行深度学习计算的性能较差。多核CPU虽然通过核心并行性大大提高了浮点计算性能，但是其内存带宽相对较低。在深度学习模型中，每个网络层都将一个批次的数据分割给不同的核心进行并行处理，此时多个核心之间会互相竞争有限的内存带宽，如果核心所需的总带宽超过CPU内存带宽上限，将导致部分核心需要等待缓存与内存之间的数据I/O，从而降低了CPU的计算效率。因此，内存带宽瓶颈导致高性能多核CPU处理器难以在深度学习计算中发挥出应有的性能。

% 虽然将CPU投入云端与GPU协同进行训练可有效提高系统的弹性，然而目前CPU相对GPU而言处理DNN模型的效率依然很低，导致系统整体性能欠佳。CPU低效的主要原因在于：DNN模型中的BN层、激活层等访存密集型层在CPU端会遭遇访存竞争问题，CPU核心整体的其所需带宽却超过了内存带宽的上限，导致CPU核心长时间处于空闲状态。由于DNN模型的层级执行，导致所有核心在每一层必须进行一次同步（同步屏障），这阻碍了不同核心混合执行不同类型的层级运算来均摊访存带宽的可能性。

基于多核CPU的深度学习计算（DNN模型训练和推理）已经广泛应用于云环境以提高效能。
% 因为在云环境的非高峰时段有大量CPU处于空闲状态
然而，与GPU相比，目前CPU处理DNN模型相的效率较低，其主要原因是DNN多层网络中不同类型的网络层访存带宽需求相差很大。例如，卷积等计算密集型网络层的带宽需求很低，但是BN（Batch Normalization）层、激活层等访存密集型网络层所需带宽却超过了CPU内存带宽的上限，多个CPU核心之间的访存竞争导致CPU利用率较低。

解决访存密集型网络层内存带宽瓶颈问题的直观思路是混合执行不同类型的网络层，以降低多个CPU核心之间的访存带宽竞争，但是其难点在于：首先，DNN模型的层级执行导致所有CPU核心在每一层会受到屏障（per-layer barrier），这阻碍了不同CPU核心混合执行不同类型的层级运算的可能；其次，现有的深度学习通信框架（例如parameter-server或ring-all-reduce）主要用于分布式环境，
% CPU内部的多个核心利用上述框架的通信性能较差，
这导致层级混合执行方法在基于多核CPU的模型训练过程中参数同步性能较差。
% 中的核心间通信会面临超高的通信延迟。

\section{论文研究工作}
针对可信性挑战与动态性挑战，面向高效能（高性能、低成本）需求，论文深入研究了云环境中的数据存储与智能计算技术。如图\ref{fig:content}所示，研究内容主要包括：基于自适应元信息比特树的高可用协同存储机制，基于可验证索引哈希树的高安全日志结构存储技术，GPU-CPU协同的深度学习计算弹性调度框架，以及面向多核CPU的深度学习计算访存加速方法。

\begin{figure}[htb]
	\centering
	\includegraphics[width=0.95\textwidth]{figs/content2}
	\caption{论文主要研究内容}
	\label{fig:content}
\end{figure}

\subsection{基于自适应元信息比特树的高可用协同存储机制MapperX}

基于云环境中I/O工作负载通常具有一定写局部性的特点，论文提出一种DM-cache的扩展机制MapperX。MapperX设计了自适应元信息比特树（Adaptive meta-data Bit Tree），以分层树形结构的方式同步维护脏位的元数据，ABT是一种特殊的非完全区间树，ABT的每个叶子节点用于描述一段连续区间是否存在脏位：只要有一个数据块是脏的，那么整个区间都是脏的，被认为需要全部恢复；当所有区间的块都是干净的，那么该叶子才是干净的，当进行崩溃恢复时，只需要找到ABT叶子节点中那些被标记为脏的区间进行恢复，而无需处理干净的区间，从而有效减少不必要的恢复时间，提高系统可用性。

MapperX可以通过在ABT的不同层级中自适应地添加或删除叶子来描述脏位的分布情况。根据空间局部性原理：当一个块被更新的话，那么它和它周围的块都更加有可能在近期再次被更新，这意味着如果一个块从干净的状态变成了脏的，那么它周围的一段区间都更有可能变成脏的，所以我们可以用ABT更高级别的叶子来描述一段更长的区间，也就是删除该叶子和其兄弟节点，只保留其父区间。
% 另一方面，如果一个块长期没有被更新过，那么根据异步脏位写回机制，这个块很可能会变成一个干净的块，它周围的一段区间也可能会变成干净的，但由于我们的脏位是描述整个区间是否含有脏块的，只要存在一个脏块，这段区间就是脏的，因此我们将在这个叶节点下添加子节点来更细粒度地描述它的脏位状态，以期待更多的干净区间。
总的来说，越多的叶子可以得到更精细化的区间脏位描述，但为了避免ABT的叶子过多而增加维护脏位的元数据开销，我们通过引入元数据持久化的SLA来控制ABT叶子的添加/删除，尽可能地保留更多干净区间状态，同时控制元数据持久化开销在可接受水平。SLA可以有效描述系统当前的I/O负载情况，当SLA过高时，我们认为有必要删除一部分叶子节点来减少元数据持久化开销；反之，我们认为可以对ABT进行扩展以更精细化描述区间的脏位状态。
实验结果表明，MapperX在显著提高系统可用性的同时只引入了可忽略不计的元数据持久化开销。

\subsection{基于可验证索引哈希树的高安全日志结构存储方案SwornDisk}

为了解决云环境中数据存储的安全性问题，
% 加密安全存储I/O效率低下的问题，
论文提出了一种新的加密存储方案SwornDisk。SwornDisk基于LSM树（log-structured merge tree）结构和异地更新加密机制，实现了高效的数据加密和安全存储。SwornDisk通过异地更新加密机制避免了每次验证任何一个数据单元都需要对整个磁盘进行验证的困难，从而可以在不影响I/O性能的前提下有效保证数据的安全性。

对于写操作，SwornDisk以追加写日志（log）的方式把数据持久化到物理磁盘上，此时相同逻辑地址数据的不同历史版本被记录在不同的物理位置上（即异地更新），攻击者无法通过将某一物理位置的数据回滚到某个历史版本来进行攻击。SwornDisk把逻辑地址（LBA）到物理地址（PBA）的映射以LSM树的形式进行保存。得益于LSM树的特性，其写开销为O(1)。对于读操作，每次要读某一个逻辑地址的数据，需要先在LSM树中根据逻辑地址查找其物理地址的索引，并且该数据的key与MAC也记录在这条索引上，用来解密和对数据进行验证。在LSM架构中查找物理位置的过程可以看做在磁盘上的SSTable中进行二分查找。在这一过程中，数据的key与MAC也记录在LSM树中的索引上，而SSTable则使用MHT算法进行加密来保证其安全性。如果每次在SSTable中进行二分查找时都对“中位点”进行一次额外O(logN)复杂度的解密和验证，那么其复杂度将会是O(logN*logN)的。针对该问题，论文对MHT进行优化，在传统的MHT结构中增加了索引标识，使其不仅具有MHT的加密功能，还同时还具有B树快速查找的功能，可以在O(logN)的复杂度内同时完成验证和二分查找。
% 并且，SwornDisk使用三级缓存策略来降低读开销，其缓存分别包括加密数据Cache、Memtable Cache和SSTable Cache。
实验结果表明，SwornDisk在保证数据安全性的前提下对I/O性能几乎没有影响。

\subsection{GPU-CPU协同的深度学习计算弹性调度框架ElasticScheduler}

针对GPU/CPU协同计算的动态弹性调度问题，论文提出一种高效的GPU-CPU协同的深度学习计算弹性调度框架Elastic Scheduler（ES）。ES提出了新的本地梯度积累算法（Local Gradient Accumulation），有效解决了CPU/GPU计算速度不匹配问题和动态计算过程中长时间动量补偿问题。ES支持协同计算（可使用不同类型的GPU和CPU设备进行深度学习计算），以及动态计算（计算过程中GPU和CPU数量可随时间的动态变化）。首先，为了解决GPU和CPU之间的速度不匹配问题，ES使用本地梯度积累算法在GPU上累积本地梯度以模拟出多个虚拟GPU，虚拟GPU的吞吐量之和等同于物理GPU，但相应的每个虚拟GPU的速度也将下降$1/n$（$n$是虚拟GPU个数），使虚拟GPU与CPU速度达到匹配，再将虚拟GPU和物理CPU进行同步以实现并行计算，从而解决了协同计算问题。其次，在动态计算场景中，大幅调整设备数量的动作将引起一个长时间动量补偿过程并降低模型精度，论文使用本地梯度积累算法，在设备数量较少时扩大批次尺寸，这样即使在设备数量大幅增加时依然可以保持整体批次的稳定性，并缩短了动量补偿的时间，从而保护模型的收敛精度。
实验结果表明，ES可以有效支持云环境中深度学习计算任务的弹性调度。

\subsection{面向多核CPU的深度学习计算访存加速方法ParaX}

针对多核CPU深度学习计算的访存竞争问题，
% 本文首次通过大量的实验和分析证实了CPU在深度学习应用中效率低下的原因主要来源于多核并行时的访存带宽竞争问题，并基于该分析
论文提出一种面向多核CPU深度学习的访存加速方法ParaX。
ParaX通过“单核心单实例”（One-Instance-per-Core）而不是传统的“单CPU单实例”方法将深度学习实例分配到每个CPU核心上执行数据并行，以允许每个核心单独对其数据批次进行处理，从而避免了DNN模型每层执行时的核心同步屏障。论文将DNN中的网络层分为两类，即执行复杂算术运算的计算密集型层（如卷积和矩阵乘法），以及访存密集型层（如BN层和激活层），“单核心单实例”方法实现了访存密集型与计算密集型网络层的混合执行和不同层之间的带宽共享，大幅提高了CPU的内存带宽利用率。对于训练，ParaX采用同步SGD策略，在每轮迭代的最后更新模型参数。针对ParaX特有的CPU多核心通信场景，设计了支持NUMA（non-uniform memory access）架构的梯度服务器通信机制，利用共享内存有效减少了CPU核心之间的参数同步开销。
% 进一步提高了ParaX的执行速度。
% 本文的实验通过对包括图像识别、自然语言处理、推荐系统在内的多种DNN应用模型进行测试，验证了ParaX可以有效提高CPU在深度学习任务上的处理速度。
实验结果表明，ParaX可以有效加速多核CPU在多种深度学习任务中的速度。

\subsection{论文组织结构}

论文的组织结构如图\ref{fig:paper_struct}所示。

第一章为绪论，主要介绍面临的问题与挑战、研究内容和主要创新点。

第二章为相关工作，主要对本文的研究背景和研究基础进行介绍。

第三章研究了云环境中的高可用协同存储技术。针对DM-cache架构的故障恢复时间过长、系统可用性低的问题设计了MapperX，通过引入自适应元信息比特树在I/O效率与恢复时间二者间取得了很好的折中。

第四章研究了云环境中的高安全加密存储技术。根据云存储环境下的新型安全威胁模型设计了基于LSM架构的安全存储加密系统SwornDisk。SwornDisk使用LSM异地更新存储方式及改进MHT算法对物理地址索引进行加密，从根本上解决了本地攻击难以防御回滚攻击的安全问题，并在写效率上达到了理论最优的O(1)时间复杂度。

第五章研究了云环境中的深度学习计算弹性调度问题，设计了支持异构计算、动态计算的弹性调度器ElasticScheduler（ES），有效解决了CPU、GPU速度不匹配导致的异构并行困难问题和动态资源调整困难问题。

第六章研究了云环境中多核CPU深度学习计算访存优化的问题。首先对问题进行了理论分析，发现多核CPU在深度学习任务中低效的根本原因是执行访存密集型网络层时的CPU核心访存竞争问题。进而针对该问题，提出了单核心单实例的ParaX方法，同时设计了基于共享内存的高效核间通信机制。

第七章为总结与展望。对全文的工作进行了总结，给出了主要的结论和研究成果，并且对未来研究工作进行了展望。


\begin{figure}[htb]
	\centering
	\includegraphics[width=0.8\textwidth]{论文组织结构}
	\caption{论文组织结构}
	\label{fig:paper_struct}
\end{figure}
